/**
 * 给定一组不含重复元素的整数数组 nums，返回该数组所有可能的子集（幂集）。
    说明：解集不能包含重复的子集。
    示例:
    输入: nums = [1,2,3]
    输出:
    [
    [3],
    [1],
    [2],
    [1,2,3],
    [1,3],
    [2,3],
    [1,2],
    []
    ]
 */

var arr = [1, 2, 3];

// var func = function (arr) {
//     var result = [];
//     var len = arr.length;
//     for (var i = 0; i < len; i++){
//         var t = [];
//         for (var j = i; j < len; j++){
//             t = t.concat(arr[j]);
//             result.push(t);
//         }
//     }
//     result.push([]);
//     return result;
// };

const func = arr => arr.reduce(
    (subsets, value) => subsets.concat(subsets.map(newArr => [value, ...newArr])
    ), [[]]);

var res = func(arr);
console.log(res);